package com.coolingme.serializable04;

import java.io.Serializable;

/**
 * 懒汉式单例模式，实现序列化
 *
 * @author wangyue
 * @date 2020/9/29 14:01
 */
public class LazySerializableSingleton implements Serializable {

    // 序列化就是说把内存中的状态通过转换成字节码的形式
    // 从而转换一个 IO 流，写入到其他地方(可以是磁盘、网络 IO)
    // 内存中状态给永久保存下来了

    // 反序列化
    // 讲已经持久化的字节码内容，转换为 IO 流
    // 通过 IO 流的读取，进而将读取的内容转换为 Java 对象
    // 在转换过程中会重新创建对象 new

    private static final LazySerializableSingleton SINGLETON = new LazySerializableSingleton();

    private LazySerializableSingleton() {

    }

    public static LazySerializableSingleton getInstance() {
        return SINGLETON;
    }

    /**
     * 防止序列化破坏单例，深克隆
     *
     * @return 实例对象
     */
    public Object readResolve() {
        return SINGLETON;
    }

    /**
     * 防止克隆破坏单例，浅克隆
     *
     * @return 实例对象
     */
    @Override
    protected Object clone() {
        return SINGLETON;
    }
}
